package perucuy.services;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.log4j.Logger;

import perucuy.dao.DAOFactory;
import perucuy.domain.Detalle;
import perucuy.dao.ConsultaDAO;
import perucuy.domain.Codigo;

public class Dominios implements Serializable {
    /**
     *
     */
    public static final String CONSULTA_SERVICE = "perucuy.logic.consulta.ConsultaService";
    private static final Logger log = Logger.getLogger(Dominios.class);
    private ConsultaDAO dao;
    private List<Detalle> tipoTarea;
    private List<Detalle> tipoClaseAlimento;
    private List<Detalle> tipoGrupoAlimento;
    private List<Detalle> tipoTipoAlimento;
    private List<Detalle> tipoTipoTratamiento;
    private List<Detalle> tipoRutaTratamiento;
    private List<Detalle> TipoUnidad;
    
    static Dominios dominios=new Dominios();
    
    public static Dominios getInstance(){
        return dominios;
    }
    
    private Dominios() {
        dao = DAOFactory.getDAOFactory(DAOFactory.Tipo.SQLMAP).getConsultaDAO();
        tipoTarea = dao.getLista("getTipoDetalle", "1");
        tipoClaseAlimento = dao.getLista("getTipoDetalle", "4");
        tipoGrupoAlimento = dao.getLista("getTipoDetalle", "2");
        tipoTipoAlimento = dao.getLista("getTipoDetalle", "3");
        tipoTipoTratamiento = dao.getLista("getTipoDetalle", "5");
        tipoRutaTratamiento = dao.getLista("getTipoDetalle", "6");
        TipoUnidad = dao.getLista("getTipoDetalle", "7");
    }
    
    public List<Detalle> getTipoTareas() {
        return tipoTarea;
    }
    
    public List<Detalle> getTipoClaseAlimento() {
        return tipoClaseAlimento;
    }
 
    public List<Detalle> getTipoGrupoAlimento() {
        return tipoGrupoAlimento;
    }
 
    public List<Detalle> getTipoTipoAlimento() {
        return tipoTipoAlimento;
    }
    
    public List<Detalle> getTipoTipoTratamiento() {
        return tipoTipoTratamiento;
    }

    public List<Detalle> getTipoRutaTratamiento() {
        return tipoRutaTratamiento;
    } 

    public List<Detalle> getTipoUnidad() {
        return TipoUnidad;
    } 
    
    private static <T extends Codigo> List<T> getListaPorId(List<T> valores, String[] strings) {
        List<T> lista = new ArrayList<T>();
        String[] ids = strings;
        Arrays.sort(ids);
        for (T item :valores){
            if (Arrays.binarySearch(ids, item.getId()) >= 0) {
                lista.add(item);
            }
        }
        return lista;
        
    }
    
    private <T extends Codigo>  T buscarEnLista(List<T> lista, String id) {
        log.debug(String.format( "buscando '%2$s' en [%1$s]",lista,id));
        for (T item :lista){
            if (item.getId().equals(id)) {
                return item;
            }
        }
        return null;
    }
}
